/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package IU;

import Logica.Carrera;
import Logica.Fachada;
import Logica.Hipodromo;
import Logica.Jornada;
import Utilidades.ManejoFechas;
import Utilidades.Observador;
import java.util.Date;
import javax.swing.JOptionPane;

/**
 *
 * @author Javier Arzarello
 */
public class CarreraCrearJD extends javax.swing.JDialog {

    /**
     * Creates new form CarreraCrearJD
     */
    public CarreraCrearJD(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        //Fachada.getInstancia().agregar(this);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblSeleccionFecha = new javax.swing.JLabel();
        lblNombre = new javax.swing.JLabel();
        btnCrear = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        dtFecha = new javax.swing.JSpinner();
        txtNombre = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        lblSeleccionFecha.setText("Seleccione día:");

        lblNombre.setText("Nombre:");

        btnCrear.setText("Crear");
        btnCrear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCrearActionPerformed(evt);
            }
        });

        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        dtFecha.setModel(new javax.swing.SpinnerDateModel());

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblSeleccionFecha)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(dtFecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblNombre)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtNombre))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnCrear)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnCancelar)))
                .addContainerGap(223, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblSeleccionFecha)
                    .addComponent(dtFecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNombre)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCrear)
                    .addComponent(btnCancelar))
                .addContainerGap(214, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnCrearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCrearActionPerformed
        // TODO add your handling code here:
        validarYCrearCarrera();
    }//GEN-LAST:event_btnCrearActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        dispose();
    }//GEN-LAST:event_btnCancelarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnCrear;
    private javax.swing.JSpinner dtFecha;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblSeleccionFecha;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

    private Date validarFecha() {
        ManejoFechas validador = new ManejoFechas();
        Date fecha = validador.TruncarFecha((Date) dtFecha.getValue());
        
        if (!validador.MayorOIgualQueHoy(fecha)){
            JOptionPane.showMessageDialog(null, "Fecha inválida.");
            return null;
        }
        return fecha;
    }
    
//    private void crearCarrera() {
//        // valido la fecha seleccionada y busco la jornada por la fecha
//        ManejoFechas validador = new ManejoFechas();
//        Date fecha = (Date) dtFecha.getValue();
//        
//        if (validador.MayorOIgualQueHoy(fecha)) {
//            Hipodromo h = PanelPrincipal.getInstancia().getHipodromoSeleccionado();
//            Jornada j = h.buscarJornada(fecha);
//            if (j != null) {
//                if (j.agregarCarrera(new Carrera(txtNombre.getText(), j.numeroCarrera()))) {
//
//                    JOptionPane.showMessageDialog(null, "Fecha: " + fecha + ", Numero de carrera: " + j.numeroCarrera());
//                } else {
//                    JOptionPane.showMessageDialog(null, "Nombre inválido");
//                }
//            }
//            else{
//                //Si no existe esa jornada, hay que crear una nueva
//                h.agregarJornada(fecha);
//                Jornada nueva = h.buscarJornada(fecha);
//                JOptionPane.showMessageDialog(null, "Fecha: " + fecha + ", Numero de carrera: " + nueva.numeroCarrera());
//            }
//        } else {
//            JOptionPane.showMessageDialog(null, "Fecha inválida.");
//        }
//        new CaballosSeleccionar(null, true).setVisible(true);
//    }
    
    private void crearCarreraMejorado(Date fecha) {
        
    ManejoFechas mf = new ManejoFechas();
    fecha = mf.formatoFecha(fecha);
    
    CaballosSeleccionar cs = new CaballosSeleccionar(null, true);
    Hipodromo h = PanelPrincipal.getInstancia().getHipodromoSeleccionado();//PIDO HIPODROMO
    Jornada j = h.buscarJornada(fecha); //BUSCO LA JORNADA
            
    if(j == null){ //SINO ENCUENTRO JORNADA
        Jornada nueva = new Jornada(fecha);//LA CREO
        nueva.agregarCarrera(new Carrera(txtNombre.getText(), nueva.numeroCarrera() + 1));//AGREGO LA CARRERA
        h.agregarJornada(nueva); //AGREGO LA JORNADA A LA LISTA
        caballoSeleccion(cs, mf, fecha, nueva);
        //JOptionPane.showMessageDialog(null, "Fecha: " + mf.convertirString(fecha) + ", Numero de carrera: " + nueva.numeroCarrera());
        //cs.mostrarFecha(mf.convertirString(fecha));
        //cs.mostrarNroCarrera(nueva.numeroCarrera());
        //cs.setVisible(true);
        
    }else{//Si EXISTE
        boolean existeCarrera = j.buscarCarrera(txtNombre.getText());
        if(existeCarrera){
            JOptionPane.showMessageDialog(null, "Ya existe una carrera con ese nombre");
            txtNombre.setText("");
        }else{
            j.agregarCarrera(new Carrera(txtNombre.getText(), j.numeroCarrera() + 1));
            caballoSeleccion(cs, mf, fecha, j);
        }
        //JOptionPane.showMessageDialog(null, "Fecha: " + mf.convertirString(fecha) + ", Numero de carrera: " + j.numeroCarrera());
        //cs.mostrarFecha(mf.convertirString(fecha));
        //cs.mostrarNroCarrera(j.numeroCarrera());
        //cs.setVisible(true);
    }      
}
    
    public void caballoSeleccion(CaballosSeleccionar cs, ManejoFechas mf, Date fecha, Jornada j){
        JOptionPane.showMessageDialog(null, "Fecha: " + mf.convertirString(fecha) + ", Numero de carrera: " + j.numeroCarrera());
        cs.mostrarFecha(mf.convertirString(fecha));
        cs.mostrarNroCarrera(j.numeroCarrera());
        cs.cargarCaballos();
        cs.setVisible(true);
    }

    private void validarYCrearCarrera() {
        if (txtNombre.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "Nombre inválido");
        } else {
            Date fecha = validarFecha();
            if (fecha != null) {
                crearCarreraMejorado(fecha);
            }
        }
    }

//    @Override
//    public void actualizar(Observable origen, Object param) {
//        if(param.equals(Fachada.Evento.CABALLO_CARRERA)){
//            ;
//        }
//    }
}

